/**
 * 定义两个数x和y近似相等：
 * 最多操作一次，选择y中的两个数位进行交换，使得x==y
 * 给定数组A，问近似相等的元素对数
 * 规模很小，直接枚举。
 * O(100*100*C(6, 2))
 */
class Solution {
public:
    int countPairs(vector<int>& nums) {
        vector<vector<int>> vec;
        size_t cnt = 0;
        for(int i=0;i<nums.size();++i)for(int j=i+1;j<nums.size();++j){
            if(isOK(nums[i], nums[j])){
                cnt += 1;
            }
        }
        return cnt;
    }

    bool isOK(int a, int b){
        if(a == b) return true;
        
        if(a > b) swap(a, b);

        vector<int> vec;
        int n = b;
        while(n){
            vec.emplace_back(n % 10);
            n /= 10;
        }
        if(vec.size() == 1) return false;
        
        vector<int> idx(vec.size(), 0);
        *--idx.end() = 1;
        *----idx.end() = 1;

        do{
            int u = -1, v = -1;
            for(int i=0;i<idx.size();++i){
                if(idx[i]){
                    if(-1 == u) u = i;
                    else v = i;
                }
            }

            swap(vec[u], vec[v]);
            int t = 0;
            for(int i=vec.size()-1;i>=0;--i) t = t * 10 + vec[i];
            swap(vec[u], vec[v]);
            if(t == a) return true;
        }while(next_permutation(idx.begin(), idx.end()));
        return false;
    }

};